<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 局部作用域赋值规则 
        // var a = 10;
        // var a ;  //声明一个变量a
        // a = 10; // 给变量a赋值；
        // var a = 10;

        // 如果不声明 变量 直接赋值变量 那么 首先会在当前函数内部赋值变量 如果函数内部没有声明那么会赋值给外层作用域
        // var a;
        // 赋值 会先赋值给当前函数 如果当前函数没有声明 那么 会向上赋值 ，最终赋值给全局作用域，变成一个全局变量
        // 注意：一定要在调用函数之后 才能赋值上；
        // 一般前提下 不推荐 不声明定义变量；
        function fun1(){
            // var a;
            fun2();
            console.log(a);
            function fun2(){
                // var a;
                fun3();  //在调用 fn3的时候由于fn3里的a没有声明 那么声明会赋值给上层作用域
                // console.log(a);
                function fun3(){
                    // var a;  //定义一个a
                    a = 10; // 给a变量赋值为10；  不推荐
                    console.log(a);
                }

                
            }
            
            
        }

        fun1();
        console.log(a);


        // var a = 10;
        // a = 20;  //不推荐
        // console.log(a);









    </script>
</body>
</html>